import { ChatMessageAttributes } from '../models/ChatMessage';

/**
 * AI服务接口
 */
export interface AIService {
  /**
   * 生成AI回复
   * @param messages 聊天消息历史
   * @param characterId 角色ID
   * @param userId 用户ID
   * @returns AI回复内容
   */
  generateResponse(
    messages: ChatMessageAttributes[],
    characterId: string,
    userId: string
  ): Promise<string>;

  /**
   * 流式生成AI回复
   * @param messages 聊天消息历史
   * @param characterId 角色ID
   * @param userId 用户ID
   * @param onChunk 接收到数据块时的回调函数
   * @returns Promise，表示生成完成
   */
  generateStreamingResponse(
    messages: ChatMessageAttributes[],
    characterId: string,
    userId: string,
    onChunk: (chunk: string) => void
  ): Promise<void>;
}

/**
 * 模拟AI服务实现
 * 在实际应用中，这里应该连接到真实的AI服务，如OpenAI GPT、Claude等
 */
export class MockAIService implements AIService {
  /**
   * 生成AI回复
   */
  async generateResponse(
    messages: ChatMessageAttributes[],
    characterId: string,
    userId: string
  ): Promise<string> {
    // 模拟AI处理延迟
    await new Promise(resolve => setTimeout(resolve, 1000));
    
    // 简单的模拟回复逻辑
    const lastMessage = messages[messages.length - 1];
    if (!lastMessage) {
      return '你好！有什么我可以帮助你的吗？';
    }
    
    // 根据最后一条消息内容生成回复
    const messageContent = lastMessage.content.toLowerCase();
    
    if (messageContent.includes('你好') || messageContent.includes('hi') || messageContent.includes('hello')) {
      return '你好！很高兴见到你！';
    } else if (messageContent.includes('再见') || messageContent.includes('bye')) {
      return '再见！期待下次与你聊天！';
    } else if (messageContent.includes('天气')) {
      return '今天天气不错，适合出门散步！';
    } else if (messageContent.includes('名字')) {
      return '我是你的AI助手，很高兴为你服务！';
    } else {
      return `我理解你说的是："${lastMessage.content}"。这是一个很有趣的话题！`;
    }
  }

  /**
   * 流式生成AI回复
   */
  async generateStreamingResponse(
    messages: ChatMessageAttributes[],
    characterId: string,
    userId: string,
    onChunk: (chunk: string) => void
  ): Promise<void> {
    // 获取完整回复
    const fullResponse = await this.generateResponse(messages, characterId, userId);
    
    // 模拟流式输出，每次发送一个字符
    for (let i = 0; i < fullResponse.length; i++) {
      onChunk(fullResponse[i]);
      // 模拟网络延迟
      await new Promise(resolve => setTimeout(resolve, 50));
    }
  }
}

/**
 * 生成AI回复
 * @param content 用户消息内容
 * @param character 角色信息
 * @param recentMessages 最近的聊天历史
 * @returns AI回复内容
 */
export async function generateAIResponse(
  content: string,
  character: any,
  recentMessages: ChatMessageAttributes[]
): Promise<string> {
  // 模拟AI处理延迟
  await new Promise(resolve => setTimeout(resolve, 1000));
  
  // 简单的模拟回复逻辑
  const messageContent = content.toLowerCase();
  
  if (messageContent.includes('你好') || messageContent.includes('hi') || messageContent.includes('hello')) {
    return `你好！我是${character.name}，很高兴见到你！`;
  } else if (messageContent.includes('再见') || messageContent.includes('bye')) {
    return `再见！我是${character.name}，期待下次与你聊天！`;
  } else if (messageContent.includes('天气')) {
    return '今天天气不错，适合出门散步！';
  } else if (messageContent.includes('名字')) {
    return `我是${character.name}，${character.description || '很高兴为你服务！'}`;
  } else {
    return `我理解你说的是："${content}"。这是一个很有趣的话题！`;
  }
}

/**
 * AI服务实例
 */
export const aiService = new MockAIService();

/**
 * 获取AI服务实例
 */
export function getAIService(): AIService {
  return aiService;
}